package br.imr.dao.impl;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import br.imr.dao.ConsultarMembroDao;
import br.imr.model.Membro;

/**
 * Classe responsavel pelos CRUDs no banco
 * 
 */
@Stateless
public class ConsultarMembroDaoImpl extends GenericDao<Membro> implements
		ConsultarMembroDao {

	@PersistenceContext
	private EntityManager em;

	public ConsultarMembroDaoImpl() {
		super(Membro.class);
	}

	@SuppressWarnings("unchecked")
	public List<Membro> consultaPorNome(String nomeMembro) {
		List<Membro> membroList = em.createQuery("Select membro from Membro membro " +
				"where membro.nome like'" + nomeMembro + "%'").getResultList();
				
		if(membroList.size() == 0){
			return null;
		}
		
		return membroList;
	}

	@SuppressWarnings("unchecked")
	public List<Membro> consultaPorDtAniversario(Date periodoInicial, Date periodoFinal) {
		SimpleDateFormat formatador = new SimpleDateFormat("MM/dd");
		
		Query query = em.createQuery(
				"SELECT membro FROM Membro membro WHERE DATE_FORMAT(membro.dataNascimento,'%m%d') " +
					">=:param1 AND DATE_FORMAT(membro.dataNascimento,'%m%d') <=:param2 AND dataExclusao IS NULL");
			query.setParameter("param1", formatador.format(periodoInicial));
			query.setParameter("param2", formatador.format(periodoFinal));
			
			List<Membro> aniversariantesList = (List<Membro>)query.getResultList();
			
			if(aniversariantesList.size() == 0){
				return null;
			}
			
		return aniversariantesList;
	}

	@SuppressWarnings("unchecked")
	public List<Membro> consultaPorMinisterio(String ministerio) {
		Query query = em.createQuery("SELECT pess FROM Membro pess WHERE " +
				"pess.ministerio =:param AND dataExclusao IS NULL");
		query.setParameter("param", ministerio);
		
		List<Membro> result = query.getResultList();
		
		if(result.size() == 0){
			return null;
		}
		
		return result;
	}

	@SuppressWarnings("unchecked")
	public List<Membro> consultarAll() {
		Query query = em.createQuery("SELECT pess FROM Membro pess order by " +
				"SUBSTRING(pess.dataNascimento, 6, 2) asc AND dataExclusao IS NULL");
		
		List<Membro> result = query.getResultList();
		
		return result;
	}

	//
	// /**
	// * Metodo que consulta no BD membros ja cadastrados com o mesmo nome e
	// endereco.
	// */
	// public List<Membro> consultaCPFCadastrado(String nome, String endereco){
	//
	// Query query = em.createQuery("SELECT pess FROM Membro pess WHERE "
	// +
	// "pess.nome =:param AND pess.endereco =:param1 and dataExclusao IS NULL");
	// query.setParameter("param", nome);
	// query.setParameter("param1", endereco);
	//
	// List<Membro> result = query.getResultList();
	//
	// if (result.size() != 0) {
	// return null;
	// }
	// return result;
	// }
	//

	// /**
	// *
	// */
	// public Membro getMembro(long id) {
	// Session session = HibernateUtil.getSessionFactory().openSession();
	// return (Membro) session.load(Membro.class, id);
	// }

	// /**
	// *
	// */
	// public List<Membro> list() {
	// Session session = HibernateUtil.getSessionFactory().openSession();
	// Transaction t = session.beginTransaction();
	// List<Membro> lista = session.createQuery("from Membro").list();
	// t.commit();
	// return lista;
	// }

	// /**
	// * Metodo responsavel por excluir o cadastro do membro no banco
	// */
	// public void remove(Membro membro) {
	// Session session = HibernateUtil.getSessionFactory().openSession();
	// Transaction t = session.beginTransaction();
	// session.delete(membro);
	// t.commit();
	// }

	// /**
	// * Metodo responsavel por atualizar/editar o cadastro do membro no banco
	// */
	// public void update(Membro membro) {
	// Session session = HibernateUtil.getSessionFactory().openSession();
	// Transaction t = session.beginTransaction();
	// session.update(membro);
	// t.commit();
	// }
}
